#include "stdafx.h"

namespace A 
{
	struct X{};
	struct Y{};
	void f( int );
	void g( X );
}

//namespace B
//{
//  void f( int i )
//  {
//    f( i );   // which f()?
//  }
//  void g( A::X x )
//  {
//    g( x );   // which g()?
//  }
//  void h( A::Y y )
//  {
//    h( y );   // which h()?
//  }
//}



//*** NOT the Myers Example 
namespace A
{
	class Z { };
	void f( Z );
}
class B      // <-- class, not namespace
{
	void f( A::Z );
	void g( A::Z parm )
	{
		f(parm); // OK: B::f, not ambiguous
	}
};


struct C
{
	void f( int ){}
	void f( double ){}
	void g( int ){}
};
struct D : public C
{
	//using C::g;//solution!
private:
	void g( std::string, bool ){}
};
TEST(name, hide_scope)
{
	D   d;
	int i = 0;
	d.f(i);  // ok, means B::f(int)
	//d.g(i);  // error: g takes 2 args
}